import axios from 'axios';
import qs from 'qs';
import common from "./sha512";

// 创建 axios 实例
let http = axios.create({
	timeout: 20000, //延时
});
// 设置 post、put 默认 Content-Type
http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
http.defaults.headers.put['Content-Type'] = 'application/json';

// 添加请求拦截器
http.interceptors.request.use(config => {
	if(config.method === 'post' || config.method === 'put') {
		// post、put 提交时，将对象转换为string, 为处理Java后台解析问题
		var timestamp = new Date().format("yyyy-MM-dd hh");
		if((typeof config.data) == 'string') {
			var data = JSON.parse(config.data);
			var param = JSON.stringify(data);
		} else if((typeof config.data) == 'object') {
			var param = JSON.stringify(config.data);
		};
		var sign = common.hexsha512(param + timestamp);
		//java只接受字符串   解析的俩种方式
		//config.data = "param=" + param + "&sign=" + sign;  //1字符串拼接
		config.data = qs.stringify({
			param,
			sign
		}); //2对象编码
	} else if(config.method === 'get') {

	};
	// 请求发送前进行处理
	return config;
}, error => {
	// 请求错误处理
	return Promise.reject(error);
});
// 添加响应拦截器
http.interceptors.response.use(response => {
	let {
		data
	} = response;
	return data;
}, error => {
	let info = {};
	if(!error.response) {
		info = {
			code: 5000,
			msg: 'Network Error'
		};
	} else {
		// 此处整理错误信息格式
		let {
			status,
			statusText,
			data
		} = error.response;
		info = {
			code: status,
			data: data,
			msg: statusText
		}
	}
	return Promise.reject(info);
})

export default function() {
	return http;
}